(function(w) {
	//变量参数
	var areaDatas; //存放后台获取的到对应城市下的区域

	//存储画图工具;
	var drawingManager = null;
	var drawPath = "";
	var drawingPolygon = null; //当前绘制的图形对象
	//记录中心点对象
	var clickCentPoint;
	//一：封装对象
	var mainUtil = {
		//0.初始化所有信息
		init: function() {
			this.initBasic();
			this.initTapEvent();
		},
		//1.初始化基本信息
		initBasic: function() {
			///初始化地图
			pageUtil.initMap();
			//页面按钮
			pageUtil.AddControl();

		},
		//2.初始事件
		initTapEvent: function() {
			//绑定事件
			pageUtil.AddEnvet();
		},
	}
	//二：封装页面信息获取
	var pageUtil = {
		//初始化地图
		initMap: function() {
			map = new BMap.Map("allmap", {
				enableMapClick: false
			});
			map.centerAndZoom('济南', 11); //设置中心点
			//map.centerAndZoom(new BMap.Point(116.98, 36.67), 11); //设置中心点
			map.enableScrollWheelZoom(true); //启用鼠标缩放

		},
		//添加页面按钮控件
		AddControl: function() {
			//初始化城市	
			otherUtil.initProvince("山东省");
		},
		//事件绑定
		AddEnvet: function() {
			//绑定省份切换事件
			$('#areaProvince').change(function() {
				var selValue = $(this).children('option:selected').val();
				var selText = $(this).children('option:selected').text();
				if (selValue == "-1") {
					//清除overlay;
					$("#areaCity").empty();
				} else {
					//加载overlay;
					otherUtil.initCity(selValue);
				}
				map.centerAndZoom(selText, 11);
			});

			//绑定城市切换事件
			$('#areaCity').change(function() {
				var selValue = $(this).children('option:selected').val();
				var selText = $(this).children('option:selected').text();
				if (selValue == "-1") {} else {
					//加载区域显示;
					otherUtil.initArea(selValue);
				}
				map.centerAndZoom(selText, 11);
				//区域切换成功显示覆盖物

			});
			//开始绘制按钮
			$("#j_StartDrawing").click(function() {
				var selValue = $("#areaList2").children('option:selected').val();
				if (selValue == "-1") {
					alert("请从下拉框中选择要绘制的片区后再开始！");
					return;
				}
				if (drawingPolygon != null) {
					alert("请使用重绘功能");
					return;
				}
				map.removeEventListener("click", otherUtil.AddOrRemoveMarker);
				pageUtil.createDrawTool();
				$("#btnStartDrawing").attr("disabled", "disabled");
			});
			//重绘按钮
			$("#j_ReDraw").click(function() {
				//删除上次绘制
				if (drawingPolygon != null) {
					map.removeOverlay(drawingPolygon);
				}
				//开启绘制
				var selValue = $("#areaList2").children('option:selected').val();
				if (selValue == "-1") {
					alert("请从下拉框中选择要绘制的片区后再开始！");
					return;
				}

				map.removeEventListener("click", otherUtil.AddOrRemoveMarker);
				pageUtil.createDrawTool();
				$("#btnStartDrawing").attr("disabled", "disabled");
			});
			//保存绘制
			$("#j_SaveDraw").click(function() {

			});
			//选择中心点
			$("#j_ChoiceCenterPoint").click(function() {
				map.addEventListener("click", otherUtil.AddOrRemoveMarker);
			});
			//保存中心点
			$("#j_SaveCenterPoint").click(function() {
				map.removeEventListener("click", otherUtil.AddOrRemoveMarker);
			});
			//微调区域
			$("#j_EditDrawing").click(function() {
				if (drawingPolygon == null) {
					alert("请先绘制区域")
				}
				//开启多边形编辑
				drawingPolygon.enableEditing();
			});
			//保存微调区域
			$("#j_SaveEditDrawing").click(function() {
				if (drawingPolygon == null) {
					alert("请先绘制区域")
				}
				drawingPolygon.disableEditing();
			});
		},

		//创建画图工具
		createDrawTool: function() {
			var styleOpt = otherUtil.getStyleOption();
			if (drawingManager == null) {
				drawingManager = new BMapLib.DrawingManager(map, {
					isOpen: true, //是否开启绘制模式
					enableDrawingTool: false, //是否显示工具栏
					drawingToolOptions: {
						anchor: BMAP_ANCHOR_TOP_RIGHT, //位置
						offset: new BMap.Size(5, 5), //偏离值
						drawingModes: [
							BMAP_DRAWING_POLYGON
						]
					},
					//circleOptions: styleOptions, //圆的样式
					polygonOptions: styleOpt //多边形的样式
					// rectangleOptions: styleOptions //矩形的样式
				});
				drawingManager.setDrawingMode(BMAP_DRAWING_POLYGON);
				//添加鼠标绘制工具监听事件，用于获取绘制结果
				drawingManager.addEventListener('overlaycomplete', pageUtil.overlaycomplete);
			} else {
				//开启绘制状态;
				drawingManager.open();
			}
		},
		//画图结束后调用
		overlaycomplete: function(e) {
			//判断是否为闭合区间
			drawingPolygon = e.overlay; //存储到临时变量;
			map.addOverlay(e.overlay); //加到地图;
			var path = e.overlay.getPath();
			var pointsString = "";
			for (var i = 0; i < path.length; i++) {
				if (i == path.length - 1) {
					pointsString += path[i].lng + "," + path[i].lat;
				} else {
					pointsString += path[i].lng + "," + path[i].lat + ";"
				}
			}
			if (drawingManager != null) {
				//关闭绘制状态;
				drawingManager.close();
			}
			drawPath = pointsString;

		},
		//重绘所画图形
		redraw: function() {
			starDrawing();
			if (drawingPolygon != null) {
				map.removeOverlay(drawingPolygon);
			}
		},
		//

	}

	//三：其它
	var otherUtil = {
		//加载省份
		initProvince: function(default_Province) {
			//清空原值
			console.log(default_Province)
			$("#areaProvince").empty();
			if (default_Province == undefined) {
				default_Province = "北京市";
			}
			var optionDefault = $("<option>").val("-1").text("选择省");
			$("#areaProvince").append(optionDefault);
			for (var i = 0; i < cityData.length; i++) {
				if (cityData[i].text == default_Province) {
					var option = $("<option selected=\"selected\">").val(cityData[i].text).text(cityData[i].text);
					$("#areaProvince").append(option);
					//加载城市；
					otherUtil.initCity(cityData[i].text);
				} else {
					var option = $("<option>").val(cityData[i].text).text(cityData[i].text);
					$("#areaProvince").append(option);
				}
			}

		},
		//加载城市
		initCity: function(textProvince) {
			//清空原值
			$("#areaCity").empty();
			var index = addressUtil.getIndex(textProvince);
			if (index == -1) {
				index = 0;
			}
			//根据省份加载城市
			var data = cityData[index].children
			if (data.length > 0) {
				var optionDefault = $("<option>").val("-1").text("选择城市");
				$("#areaCity").append(optionDefault);
			} else {
				var optionDefault = $("<option selected=\"selected\">").val("-1").text("选择城市");
				$("#areaCity").append(optionDefault);
			}
			for (i = 0; i < data.length; i++) {
				if (i == 0) {
					var option = $("<option selected=\"selected\">").val(data[i].text).text(data[i].text);
					$("#areaCity").append(option);
					//加载overlay;

				} else {
					var option = $("<option>").val(data[i].text).text(data[i].text);
					$("#areaCity").append(option);
				}
			}
		},
		//加载显示片区
		initArea: function(cityText) {
			$.ajax({
				type: 'post',
				url: "",
				data: [],
				dataType: "json",
				contentType: "application/json",
				cache: false,
				success: function(data) {
					$("#areaList").empty();
					$("#areaList2").empty();
					if (data != "undefined" && data != null) {
						areaDatas = data;
						var optionDefault = $("<option selected=\"selected\">").val("-1").text("所有区域");
						$("#areaList").append(optionDefault);
						for (i = 0; i < data.length; i++) {
							var option = $("<option>").val(data[i].Code).text(data[i].Name);
							$("#areaList").append(option);
						}

						var optionDefault2 = $("<option selected=\"selected\">").val("-1").text("选择区域");
						$("#areaList2").append(optionDefault2);
						for (i = 0; i < data.length; i++) {
							var option = $("<option>").val(data[i].Code).text(data[i].Name);
							$("#areaList2").append(option);
						}
					} else {
						alert("读取数据出错！");
					}
				},
				error: function() {
					alert('加载片区失败！');
				}
			});
		},
		//创建覆盖物
		createOverlay: function(mapPoints, fillColor, txtName, centerPoint) {
			if (mapPoints == "undefined" || mapPoints == '')
				return;
			var pointsArray = mapPoints.split(';');
			var secRing = [];
			for (i = 0; i < pointsArray.length; i++) {
				secRing.push(new BMap.Point(pointsArray[i].split(',')[0], pointsArray[i].split(',')[1]));
			}
			//创建多边形
			//var secRing = [new BMap.Point(116.362875, 39.949459), new BMap.Point(116.378972, 39.956539), new BMap.Point(116.438764, 39.955654), new BMap.Point(116.440488, 39.911836), new BMap.Point(116.365175, 39.905637)];
			//创建多边形
			if (fillColor == typeof(undefined) || fillColor == null || fillColor == "")
				fillColor = "red";
			var styleOption = {
				strokeColor: fillColor, //边线颜色。
				fillColor: fillColor, //填充颜色。当参数为空时，圆形将没有填充效果。
				strokeWeight: 2, //边线的宽度，以像素为单位。
				strokeOpacity: 0.5, //边线透明度，取值范围0 - 1。
				fillOpacity: 0.3, //填充的透明度，取值范围0 - 1。
				strokeStyle: 'solid' //边线的样式，solid或dashed。
			};
			var secRingPolygon = new BMap.Polygon(secRing, styleOption);
			//添加多边形到地图上和数组里;
			overlays.push(secRingPolygon);
			map.addOverlay(secRingPolygon);

			if (centerPoint != "" && centerPoint.split(',').length == 2) {
				var cpoint = new BMap.Point(centerPoint.split(',')[0], centerPoint.split(',')[1]);
				var opts = {
					position: cpoint, // 指定文本标注所在的地理位置
					offset: new BMap.Size(0, 0) //设置文本偏移量
				};
				var label = new BMap.Label(txtName, opts); // 创建文本标注对象
				label.setStyle({
					fontSize: "14px",
					height: "20px",
					lineHeight: "20px",
					fontFamily: "微软雅黑",
					fontWeight: "bold",
					color: "#96400",
				});
				map.addOverlay(label);
			}
		},
		//显示覆盖物
		showAreas: function() {
			clearOverlay(); //先清空;
			if (areaDatas != null) {
				var selShowArea = $("#areaList").children('option:selected').val();
				if (selShowArea != "-1") {
					for (i = 0; i < areaDatas.length; i++) {
						if (areaDatas[i].Code == selShowArea) {
							//显示这个;
							createOverlay(areaDatas[i].Data1, areaDatas[i].Data2, areaDatas[i].Name, areaDatas[i].Data3);
							break;
						}
					}
				} else {
					for (j = 0; j < areaDatas.length; j++) {
						//全部显示;
						createOverlay(areaDatas[j].Data1, areaDatas[j].Data2, areaDatas[j].Name, areaDatas[j].Data3);
					}
				}
			}
		},
		//清空覆盖物
		clearOverlay: function() {
			for (i = 0; i < overlays.length; i++) {
				map.removeOverlay(overlays[i]);
			}
			overlays.splice(0, overlays.length); //清空
			var labelOverLays = map.getOverlays();
			for (i = 0; i < labelOverLays.length; i++) {
				map.removeOverlay(labelOverLays[i]);
			}
		},
		//获取绘制时的样式
		getStyleOption: function() {
			var colorStye = $("#colorPick").val();
			if (colorStye == "") {
				colorStye = "red";
			}
			var styleOption = {
				strokeColor: colorStye, //边线颜色。
				fillColor: colorStye, //填充颜色。当参数为空时，圆形将没有填充效果。
				strokeWeight: 2, //边线的宽度，以像素为单位。
				strokeOpacity: 0.8, //边线透明度，取值范围0 - 1。
				fillOpacity: 0.6, //填充的透明度，取值范围0 - 1。
				strokeStyle: 'solid' //边线的样式，solid或dashed。
			};
			return styleOption;
		},
		//
		//添加中心标记点
		AddOrRemoveMarker: function(e) {
			//删除原标记点
			map.removeOverlay(clickCentPoint);
			//添加标记点	
			var marker = new BMap.Marker(e.point); // 创建标注
			map.addOverlay(marker);
			//添加文本信息	
			var opts = {
				offset: new BMap.Size(-10, -15) //设置文本偏移量
			}
			var label = new BMap.Label("中心点", opts); // 创建文本标注对象
			label.setStyle({
				color: "red",
				border: "0px",
			});
			marker.setLabel(label);
			clickCentPoint = marker;
		}
	};

	w.mainUtil = mainUtil;
})(window)
//页面加载
$(function() {
	mainUtil.init();
});
